aboutsummaryrefslogtreecommitdiffstats
path: root/src/app/groups/[groupId]/expenses/create-from-receipt-button-actions.ts
diff options
context:
space:
mode:
authorMert Demir <mertd@users.noreply.github.com>2024-02-05 02:23:11 +0900
committerGitHub <noreply@github.com>2024-02-04 12:23:11 -0500
commitfb49fb596a56955ca70eac9da47d2826299469e1 (patch)
tree71dd092faf01d37b35a8015e3cfda494ddc7b99e /src/app/groups/[groupId]/expenses/create-from-receipt-button-actions.ts
parent10fd69404a69b15d5c0888d9382663f324455ec0 (diff)
Automatic category from expense title (#80)
* environment variable * random category draft * get category from ai * input limit and documentation * use watch * use field.name * prettier * presigned upload, readme warning, category to string util * prettier * check whether feature is enabled * use process.env * improved prompt to return id only * remove console.debug * show loader * share class name * prettier * use template literals * rename format util * prettier
Diffstat (limited to 'src/app/groups/[groupId]/expenses/create-from-receipt-button-actions.ts')
-rw-r--r--src/app/groups/[groupId]/expenses/create-from-receipt-button-actions.ts8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/app/groups/[groupId]/expenses/create-from-receipt-button-actions.ts b/src/app/groups/[groupId]/expenses/create-from-receipt-button-actions.ts
index 1714f82..78f043d 100644
--- a/src/app/groups/[groupId]/expenses/create-from-receipt-button-actions.ts
+++ b/src/app/groups/[groupId]/expenses/create-from-receipt-button-actions.ts
@@ -1,7 +1,9 @@
'use server'
import { getCategories } from '@/lib/api'
import { env } from '@/lib/env'
+import { formatCategoryForAIPrompt } from '@/lib/utils'
import OpenAI from 'openai'
+import { ChatCompletionCreateParamsNonStreaming } from 'openai/resources/index.mjs'
const openai = new OpenAI({ apiKey: env.OPENAI_API_KEY })
@@ -9,7 +11,7 @@ export async function extractExpenseInformationFromImage(imageUrl: string) {
'use server'
const categories = await getCategories()
- const body = {
+ const body: ChatCompletionCreateParamsNonStreaming = {
model: 'gpt-4-vision-preview',
messages: [
{
@@ -21,7 +23,7 @@ export async function extractExpenseInformationFromImage(imageUrl: string) {
This image contains a receipt.
Read the total amount and store it as a non-formatted number without any other text or currency.
Then guess the category for this receipt amoung the following categories and store its ID: ${categories.map(
- ({ id, grouping, name }) => `"${grouping}/${name}" (ID: ${id})`,
+ (category) => formatCategoryForAIPrompt(category),
)}.
Guess the expense’s date and store it as yyyy-mm-dd.
Guess a title for the expense.
@@ -35,7 +37,7 @@ export async function extractExpenseInformationFromImage(imageUrl: string) {
},
],
}
- const completion = await openai.chat.completions.create(body as any)
+ const completion = await openai.chat.completions.create(body)
const [amountString, categoryId, date, title] = completion.choices
.at(0)